| compoundDesc% - составная геометрия vbank* - указатель на массив (банк) вершин nvert% - количество вершин |
| Добавляет в составную геометрию тело с выпуклой геометрией, задаваемой набором вершин. |
|
;Пример использования функций ;pxCompoundAddHullShape Graphics3D 800,600,32,2 cam = CreateCamera() PositionEntity cam,0,6,-20 light = CreateLight() RotateEntity light,20,30,40 PxCreateWorld(1) ;Создадим кубик ;plane_body = pxCreateCube(15,0.5,15,0) ;визуализируем его ;plane_mesh=CreateCube() ;ScaleEntity(plane_mesh,15,0.5,15) ;Создаем составное тело PX comp_desc = pxCreateCompoundDesc() mesh1 = CreatePivot() cube1 = CreateCube(mesh) ScaleMesh cube1,5,.1,.1 addhull(comp_desc,cube1) cube2 = CreateCube(mesh) ScaleMesh cube2,.1,5,.1 addhull(comp_desc,cube2) cube3 = CreateCube(mesh) ScaleMesh cube3,.1,.1,5 addhull(comp_desc,cube3) body = pxCreateCompound(comp_desc, 2); создаём боди из дескриптора ;Ставим тело в позицию pxSetPosition body,0,15,0 pxSetRotation body,10,10,10 While Not(KeyHit(1)) ;обсчитываем физический мир RenderPhysic(60,0) ;визуализируем компаунд pxSetEntity(cube1, body) pxSetEntity(cube2, body) pxSetEntity(cube3, body) RenderWorld Flip Wend End ;функция добавляет тело на основе меша в компаунд Function addhull(compoundDesc%, mesh%) Local nsurf = CountSurfaces(mesh) Local nvert = 0 For ns = 1 To nsurf Local surf = GetSurface(mesh,ns) nvert = nvert + CountVertices(surf) Next Local vbank = CreateBank(nvert*4*3) nv = 0 For ns = 1 To nsurf surf = GetSurface(mesh,ns) nvv = CountVertices(surf) For nvc = 0 To nvv - 1 PokeFloat vbank,nv*12+0,VertexX(surf,nvc) PokeFloat vbank,nv*12+4,VertexY(surf,nvc) PokeFloat vbank,nv*12+8,VertexZ(surf,nvc) nv = nv+1 Next Next ;----------- применяем pxCompoundAddHullShape: ------------ pxCompoundAddHullShape(compoundDesc,vbank,nvert) FreeBank vbank End Function |
К содержанию
Нажмите здесь чтобы увидеть последнюю версию этой странички в режиме online.